package com.ads.tpgrupo4.persistence.api;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

import com.ads.tpgrupo4.domain.cpr.core.Cliente;
import com.ads.tpgrupo4.domain.cpr.core.Rodamiento;
import com.ads.tpgrupo4.domain.cpr.cotizacion.Cotizacion;
import com.ads.tpgrupo4.domain.cpr.facturacion.Factura;
import com.ads.tpgrupo4.domain.cpr.ordenDeCompra.OrdenDeCompra;
import com.ads.tpgrupo4.domain.cpr.ordenDePedido.EstadoOrdenDePedido;
import com.ads.tpgrupo4.domain.cpr.ordenDePedido.OrdenDePedido;
import com.ads.tpgrupo4.domain.cpr.proveedores.ItemListaDePrecios;
import com.ads.tpgrupo4.domain.cpr.proveedores.ListaDePrecios;
import com.ads.tpgrupo4.domain.cpr.proveedores.Proveedor;
import com.ads.tpgrupo4.domain.cpr.remito.EstadoRemitoDeProveedor;
import com.ads.tpgrupo4.domain.cpr.remito.Remito;
import com.ads.tpgrupo4.domain.cpr.remito.RemitoACliente;
import com.ads.tpgrupo4.domain.cpr.remito.RemitoDeProveedor;
import com.ads.tpgrupo4.domain.cpr.solicitudDeCotizacion.EstadoSolicitudDeCotizacion;
import com.ads.tpgrupo4.domain.cpr.solicitudDeCotizacion.SolicitudDeCotizacion;
import com.ads.tpgrupo4.dtos.ItemListaComparativaDePreciosDTO;
import com.ads.tpgrupo4.dtos.ListaComparativaDePreciosSearchDTO;

public interface IPersistenceService extends Remote {

	void saveRodamientos(List<Rodamiento> rodamientos) throws RemoteException;
	
	void saveRemitosAClientes(List<RemitoACliente> remitosAClientes) throws RemoteException;

	void saveProveedor(Proveedor proveedor) throws RemoteException;

	void saveSolicitudDeCotizacion(SolicitudDeCotizacion solicitudDeCotizacion) throws RemoteException;

	void saveCotizacion(Cotizacion cotizacion) throws RemoteException;
	
	void saveOrdenDePedido(OrdenDePedido ordenDePedido) throws RemoteException;
	
	void saveOrdenesDeCompra(List<OrdenDeCompra> ordenesDeCompra) throws RemoteException;
	
	void saveFacturas(List<Factura> facturas) throws RemoteException;
	
	void saveRemito(Remito remito) throws RemoteException;
	
	void saveCliente(Cliente cliente) throws RemoteException;
	
	List<OrdenDeCompra> getOrdenesDeCompra()  throws RemoteException;
	
	List<Cotizacion> getCotizaciones() throws RemoteException;
	
	List<RemitoACliente> getRemitosACliente() throws RemoteException;
	
	List<Factura> getFacturas() throws RemoteException;
	
	Rodamiento findRodamiento(String serie, String sufijo, String marca, String origen) throws RemoteException;

	void deleteRodamiento(Rodamiento rodamiento) throws RemoteException;
	
	Proveedor findProveedor(String cuil) throws RemoteException;

	Cliente findCliente(String cuil) throws RemoteException;
	
	ListaDePrecios findListaDePrecios(Long idProveedor, Long numeroDeLista) throws RemoteException;

	void saveListaDePrecios(ListaDePrecios listaDePrecios) throws RemoteException;

	List<ItemListaComparativaDePreciosDTO> searchInfoComparativaDePreciosDeRodamientos(
			ListaComparativaDePreciosSearchDTO searchDTO) throws RemoteException;
	
	List<SolicitudDeCotizacion> findSolicitudesDeCotizacionPendientes() throws RemoteException;

	Cotizacion findCotizacionByNumero(Long nroCotizacion) throws RemoteException;
	
	OrdenDePedido findOrdenDePedidoByNumeroCotizacion(Long nroCotizacion) throws RemoteException;
	
	void updateEstadoSolicitudDeCotizacion(Long solicitudDeCotizacionId,
			EstadoSolicitudDeCotizacion nuevoEstado) throws RemoteException;
	
	void updateEstadoOrdenDePedido(Long ordenDePedidoId,
			EstadoOrdenDePedido nuevoEstado) throws RemoteException;
	
	void updateEstadoRemitoDeProveedor(Long remitoDeProveedorId, EstadoRemitoDeProveedor nuevoEstado) throws RemoteException;

	void updateEstadoFacturadoRemitoACliente(Long remitoAClienteId, Boolean facturado) throws RemoteException;
	
	List<OrdenDePedido> findOrdenesDePedidoPendientes() throws RemoteException;
	
	ItemListaDePrecios findItemListaDePreciosById(Long id) throws RemoteException;
	
	ListaDePrecios findListaDePreciosAsociadaA(ItemListaDePrecios itemListaDePrecios) throws RemoteException;
	
	OrdenDeCompra findOrdenDeCompraByNumero(Long numeroDeOrdenDeCompra)  throws RemoteException;
	
	List<RemitoDeProveedor> findRemitosConMercaderiaNoEntregada() throws RemoteException;
	
	List<RemitoACliente> findRemitosAClienteNoFacturados() throws RemoteException;
	
}
